/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: 86136
 * Date: 2025-04-15
 * Time: 18:06
 */
/*class SingletonLazy {
    private static SingletonLazy instance = null;
    private static Object locker = new Object();
    public static SingletonLazy getInstance() {
        //==是原子的
        if (instance == null) {
            //缺陷：如果存在多个线程调用，还没有创建实例时是安全的，但是一但创建后其他线程再次实例化就会出现线程安全问题
            synchronized (locker) {
                //非原子的
                instance = new SingletonLazy();
            }
        }
        //是原子的
        return instance;
    }

    private SingletonLazy() {

    }
}*/
/*class SingletonLazy {
    private static SingletonLazy instance = null;
    private static Object locker = new Object();
    public static SingletonLazy getInstance() {
        //此时可以解决原子性问题，但是每次调用都会触发一次加锁，多线程的情况下就会出现阻塞，会影响效率
        synchronized (locker) {
            //==是原子的
            if (instance == null) {
                //非原子的
                instance = new SingletonLazy();
            }
        }
        //是原子的
        return instance;
    }

    private SingletonLazy() {

    }
}*/
class SingletonLazy {
    private static SingletonLazy instance = null;
    private static Object locker = new Object();
    public static SingletonLazy getInstance() {
        //这的instance 的作用是判断是否需要加锁，但是还可能存在内存可见性问题
        if(instance == null) {
            synchronized (locker) {
                //==是原子的,此时的instance的作用是判断是否需要new对象
                if (instance == null) {
                    //非原子的
                    instance = new SingletonLazy();
                }
            }
        }
        //是原子的
        return instance;
    }

    private SingletonLazy() {

    }
}

public class Demo38 {
    public static void main(String[] args) {

    }
}
